home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat50 / cprg / compc.doc < prev    next >
Encoding:
Text File  |  1993-09-24  |  8.2 KB  |  194 lines

  1. /*************************************************************************/
  2. /*                                                                       */
  3. /* COMPC.C et DECOMP.C Compression et décompression de fichiers source C */
  4. /*              V1.00 FREEWARE Christian BRUNON 20-08-1993               */
  5. /*                                                                       */
  6. /*             +-----------------------------------------+               */
  7. /*             | Logiciel placé dans le domaine FREEWARE |               */
  8. /*             +-----------------------------------------+               */
  9. /* L'utilisation et la diffusion de ce programme, des fichiers sources   */
  10. /* et de la documentation sont entièrement libres.                       */
  11. /*                                                                       */
  12. /*                           Christian BRUNON                            */
  13. /*                        30 Rue Georges Brassens                        */
  14. /*                      43140 LA SEAUVE SUR SEMENE                       */
  15. /*                                FRANCE                                 */
  16. /*                                                                       */
  17. /*            Fichier source Lattice C AmigaDOS Version 5.04             */
  18. /*                                                                       */
  19. /*************************************************************************/
  20.  
  21. CompC : Utilitaire de compression de fichiers sources écrits en langage C.
  22. DeCompC : L'utilitaire de décompression.
  23.  
  24. CompC permet de compresser les fichiers sources écrits en C à un taux de
  25. 25 % environ.
  26.  
  27. On peut compresser d'autres types de fichiers ASCII, mais avec des gains
  28. moins importants.
  29.  
  30.  
  31. Utilisation de CompC :
  32. --------------------
  33.  
  34.      CompC [-DEST] Fichier1 [-DEST] [Fichier2] [...]
  35.  
  36. Fichier1, Fichier2 sont les fichiers à compresser, préciser bien
  37. l'extension ".C" pour les sources en langage C, il n'y a pas d'extension
  38. par défaut.
  39.  
  40. -DEST est le répertoire de sauvegarde des fichiers compressés.
  41. En l'absence de ce paramètre, les fichiers sont compressés dans le réper-
  42. toire du fichier à compresser. Lorsqu'un nouveau répertoire est précisé,
  43. il est effectif pour les fichiers suivants jusqu'à ce qu'un nouveau
  44. répertoire soit précisé.
  45.  
  46. Si aucune destination n'est précisée, la sauvegarde se fait dans le même
  47. répertoire que le fichier source.
  48.  
  49. Si le répertoire de destination n'existe pas, il est créé.
  50.  
  51. Les fichiers compressés ont l'extension ".K" et ils conservent les bits de
  52. protection et le commentaire des fichiers sources.
  53.  
  54. Le logiciel écrit les noms de fichiers sources, suivis de leur longueur en
  55. octets, du nombre d'octets lus actuellement.
  56.  
  57. Cette dernière valeur est remplacée, en fin de compression, par la longueur
  58. du fichier compressé et suivi par le taux de compression.
  59.  
  60. Si un fichier n'a pût être compressé pour une insuffisance de mémoire, une
  61. erreur DOS ou parceque le fichier comprimé est plus volumineux que le fi-
  62. chier source, aucun fichier compressé ne sera produit pour ce fichier sour-
  63. ce.
  64.  
  65.  
  66. Exemple :
  67. -------
  68.  
  69. CompC DF0:Exemple.C -RAM: Util.C - Rep/CompC.C -INCLUDE: DISK:Test.C
  70.                     *****        *             *********
  71.  
  72.  
  73. Résultats : Fichiers sources | fichiers compressés
  74. ---------   -----------------+--------------------
  75.              DF0:Exemple.C   |   DF0:Exemple.C.K
  76.              Util.C          |   RAM:Util.C.K
  77.              Rep/CompC.C     |   CompC.C.K       ( Répertoire actuel )
  78.              DISK:Test.C     |   INCLUDE:Test.C.K
  79.  
  80.  
  81. Fonctionnement :
  82. --------------
  83.  
  84. CompC comprime les espaces se trouvant au début des lignes, celà est trés
  85. intéressant puisque beaucoup de lignes commencent par un nombre important
  86. d'espaces et de tabulations. Les codes de tabulation sont remplacés par un
  87. espace. Evitez toutefois d'utiliser les tabulations dans les éditeurs et
  88. les traîtements de textes, à l'impression du document, celà produit des
  89. lignes complètement décalées les unes des autres, une horreur.
  90.  
  91. CompC utilise un système de dictionnaire inscrit au fur et à mesure dans le
  92. fichier compressé. Chaque fois qu'un nouveau mot ( instruction, mot-clé,
  93. fonction, ... ) est trouvé dans le fichier à compresser, il est écrit dans
  94. le fichier compressé précédé et suivi d'une marque (octet) de 'NouveauMot'.
  95. On le range dans un tableau trié ( par insertion ) ( le dictionnaire ) et
  96. un numéro lui est affecté. 
  97. Ainsi, chaque fois que ce mot est relu dans le fichier à compresser, il est
  98. remplacé par une marque (octet) de 'Mot Existant', suivi par le numéro du
  99. mot ( PAS par sa position dans le tableau ).
  100.  
  101. CompC comprime aussi les commentaires ( délimités par /* et */ ) et les
  102. chaînes située entre guillemets.
  103.  
  104. CompC code sur un octet les séquences de caractères suivantes car elles se
  105. retrouvent trés fréquemment dans un fichier source C :
  106.  Séquence -> Code ( Octet )
  107.    '/*'   -> Commentaire1On
  108.    '*/'   -> Commentaire1Off
  109.    '/* '  -> Commentaire2On
  110.    ' */'  -> Commentaire2Off
  111.  
  112. Tous les codes inscrits dans le fichier comprimé ( NouveauMot, Commentai-
  113. re1On, ... ) sont des codes non utilisés par l'éditeur LSE ( Lattice Screen
  114. Editor ). Ces codes ne sont jamais utilisés dans des éditeurs de code ascii
  115. pur ( Ed, Edit, ... ). Ce n'est pas le cas de NotePad qui utilise des codes
  116. de contrôle. Vous pouvez donc utiliser cet utilitaire pour comprimer tout
  117. fichier texte en ascii pur. Les performances seront peut-être moins bonnes
  118. qu'avec un fichier source en C.
  119.  
  120.  
  121. CONSEIL :
  122. -------
  123.  
  124. Lorsque CompC lit un nouveau mot et que celui-ci est directement suivi par
  125. une parenthèse ouverte ( nom de fonction, de macro ou d'instruction ) ou
  126. par un crochet ouvert ( nom de tableau ou de chaîne ( c'est la même chose !
  127.  ) ), ce caractère est inclu avec le mot. Il est donc conseillé de ne pas
  128. insérer d'espace entre ce type de mot et le crochet ou la parenthèse qui
  129. suit. Remplacez 'while (' par 'while(', 'Chaine [i]' par 'Chaine[i]'. Le
  130. dictionnaire prendra alors les nouveaux mots 'while(' et 'Chaine['. Celà
  131. permet de gagner un peu plus de place et d'obtenir des gains plus impor-
  132. tants.
  133.  
  134.  
  135. Extensions futures :
  136. ------------------
  137.  
  138. Compresser les séquences d'espaces ( pas seulement les espaces en début de
  139. lignes ) et de '*'. Ces séries de caractères se rencontrent souvent dans
  140. les fichiers sources en C.
  141.  
  142. J'ai écrit un utilitaire équivalent pour les fichiers sources en TURBO
  143. PASCAL sur PC. Je pourrais envisager dans l'avenir de l'adapter aux fi-
  144. chiers sources KickPascal sur AMIGA. Sur PC, les fins de lignes sont mar-
  145. quées par un code de saut de ligne ( LF = LINEFEED = ASCII 10 ) ET par un
  146. code de retour chariot ( CR = CARRIAGE RETURN = ASCII 13 ). Sur AMIGA, les
  147. lignes de fichiers textes sont uniquement marquées par un code de saut de
  148. ligne. Celà permet sur les PC de comprimer plus efficacement en supprimant
  149. l'un des deux codes, puisqu'ils font double emploi. Ainsi, pour un texte de
  150. 1024 lignes ( on atteint trés vite ce nombre ), en éliminant l'un de ces
  151. codes à la compression ( quitte à le restituer à la décompression ), on ré-
  152. alise une économie d'un KiloOctet ( = 1 024 octets ) de place, ce qui n'est
  153. pas négligeable, surtout lorqu'on sait que des fichiers peuvent contenir
  154. plusieurs milliers de lignes.
  155.  
  156.  
  157. Utilisation de DeCompC :
  158. ----------------------
  159.  
  160.    DeCompC [-DEST] Fichier1[.K] [-DEST] [Fichier2[.K]] [...]
  161.  
  162. Fichier1, Fichier2 sont les fichiers à décompresser. Ils doivent posséder
  163. l'extension ".K", mais il est inutile de le préciser dans la ligne de com-
  164. mande.
  165.  
  166. -DEST a la même signification que pour CompC.
  167.  
  168. De même, les fichiers décompressés conservent leurs bits d'attributs et
  169. leur commentaire.
  170.  
  171. Un fichier décompressé peut avoir une taille inférieure à sa taille d'ori-
  172. gine ( avant d'être compressé ). En effet, CompC élimine les espaces qui
  173. peuvent se trouver en fin de ligne.
  174.  
  175.  
  176. Exemple :
  177. -------
  178.  
  179. DeCompC DF1:EX1.C -DF1:REP RAM:EX2.C.K LIB:EX3.C - RAM:EX4.C
  180.                   ********                       *
  181.  
  182.  
  183. Résultats : Fichiers compressés | fichiers sources
  184. ---------   --------------------+-----------------
  185.              DF1:EX1.C.K        |   DF1:EX1.C
  186.              RAM:EX2.C.K        |   DF1:REP/EX2.C
  187.              LIB:EX3.C.K        |   DF1:REP/EX3.C
  188.              RAM:EX4.C.K        |   EX4.C          ( Répertoire actuel )
  189.  
  190.  
  191.  
  192. Aprés de nombreux tests, je n'ai pût déceler de bugs. Si vous en découvrez
  193. un, veuillez avoir la gentillesse de m'en prévenir.
  194.